###Function###
DllStructCreate

###Description###
Erzeugt eine Struktur im C/C++-Stil die mit DllCall genutzt werden kann.

###Syntax###
DllStructCreate ( Struct [, Pointer] )


###Parameters###
@@ParamTable@@
Struct
	Ein String, der die zu erzeugende Struktur reprsentiert (Siehe Bemerkung).
Pointer
	[optional] Falls bereitgestellt, belegt die Struktur keinen neuen Speicher, sondern nutzt den Speicher, auf dessen Adresse der bergebene Zeiger verweist.
@@End@@

###ReturnValue###
@@ReturnTable@@
Erfolg:	Eine Variable fr den Gebrauch in DllStruct-Aufrufen.
Fehler:	Setzt @error ungleich Null.
@Error:	1 = bergebene Variable an DllStructCreate war kein String.
	2 = Unbekannter Datentyp in der bergebenen Variable.
	3 = Belegung des bentigten Speichers fr die Struktur fehlgeschlagen, oder Pointer = 0.
	4 = Fehler bei der Belegung des Speichers fr den bergebenen String.
@@End@@

@@ParamTable@@
<b>Typ</b>
	<b>Details</b>
BYTE
	8bit(1byte) unsigned char
BOOLEAN
	8bit(1byte) unsigned char
CHAR
	8bit(1byte) ASCII char
WCHAR
	16bit(2byte) UNICODE wide char
short
	16bit(2bytes) signed integer
USHORT
	16bit(2bytes) unsigned integer
WORD
	16bit(2bytes) unsigned integer
int
	32bit(4bytes) signed integer
long
	32bit(4bytes) signed integer
BOOL
	32bit(4bytes) signed integer
UINT
	32bit(4bytes) unsigned integer
ULONG
	32bit(4bytes) unsigned integer
DWORD
	32bit(4bytes) unsigned integer
INT64
	64bit(8bytes) signed integer
UINT64
	64bit(8bytes) unsigned integer
ptr
	32 or 64bit unsigned integer (Je nach dem, ob die x86 oder die x64 Version von AutoIt benutzt wird)
HWND
	32bit(4bytes) integer
HANDLE
	32bit(4bytes) integer
float
	32bit(4bytes) floating point
double
	64bit(8bytes) floating point
INT_PTR, LONG_PTR, LRESULT, LPARAM
	32 or 64bit signed integer (Je nach dem, ob die x86 oder die x64 Version von AutoIt benutzt wird)
UINT_PTR, ULONG_PTR, DWORD_PTR, WPARAM
	32 or 64bit unsigned integer (Je nach dem, ob die x86 oder die x64 Version von AutoIt benutzt wird)
STRUCT
	Die folgenden Datentypen werden in bereinstimmung mit den Regeln der C Deklaration ausgerichtet. Siehe unten.
ENDSTRUCT
	Ende der Datentypen-Zusammenstellung. Einbettung ist mglich, siehe unten.
ALIGN
	n bytes Grenze, an der der Datentyp ausgerichtet werden muss.
@@End@@


###Remarks###
Jeder Datentyp muss mit einem Semikolon getrennt werden ';'.

Array's werden durch hinzufgen von '[size]' nach dem Datentyp erzeugt: <a href="DllStructCreate.htm">DllStructCreate</a>("int;char[128]").

Ein Elementname kann hnlich der C Deklaration hinzugefgt werden (<a href="DllStructCreate.htm">DllStructCreate</a>("int n;char buffer[128]")). 
Dieser Elementname kann anstelle eines Elements in anderen DllStruct... Funktionen genutzt werden. Er muss alphanumerisch und/oder mit einem Unterstrich sein (a-z,1-9,_).

Wird eine Zusammenstellung von Datentypen definiert wie in "struct{}" in C Deklaration, muss "STRUCT; ...; ENDSTRUCT;" angewendet werden.
Dies ist notwendig, um die Ausrichtung innerhalb der gesamten Struktur zu bercksichtigen. Dies ist nicht erforderlich, wenn alle Datentypen in der definierten Struktur, als eine implizite Struktur Ausrichtung angelegt wurden.

<a href="DllStructCreate.htm">DllStructCreate</a>("int;STRUCT;ptr;int;ENDSTRUCT;int")    ; Struktur ist 32 byte unter einem Windows 64-Bit und 16 unter einem Windows 32-Bit
<a href="DllStructCreate.htm">DllStructCreate</a>("int;ptr;int;int")    ; Struktur ist 24 byte unter einem Windows 64-Bit und 16 unter einem Windows 32-Bit

Fr eine andere Ausrichtung der Struktur kann man "align" als Prefix benutzen. Standardwert fr n ist 8.
Erlaubte Werte sind 1, 2, 4, 8 und 16. Die Ausrichtung eines Elements wird entweder an der Grenze eines Vielfachen von n oder an der eines Vielfachen der Gre eines Elements sein, <b>je nach dem welches kleiner ist</b>. Dies ist wie bei der "#pragma pack option" mit dem Microsoft Visual C++ Compiler.

<a href="DllStructCreate.htm">DllStructCreate</a>("short;int")     ; Die Struktur ist 8 Bytes gro, der "int" beginnt ab Offset 4
<a href="DllStructCreate.htm">DllStructCreate</a>("align 2;short;int")     ; Die Struktur ist 6 Bytes gro, der "int" beginnt ab Offset 2 

<a href="DllStructCreate.htm">DllStructCreate</a>("byte;double")     ; Die Struktur ist 16 Bytes gro, der "double" beginnt ab Offset 8
<a href="DllStructCreate.htm">DllStructCreate</a>("align 4;byte;double")     ; Die Struktur ist 12 Bytes gro, der "double" beginnt ab Offset 4

Wenn eine nderung der Ausrichtung bentigt wird, kann "align" vor dem ersten Element, welches gendert werden werden soll, stehen. "align" oder "align 8" fhrt zur Standardausrichtung.

Um belegten Speicher wieder freizugeben, braucht man lediglich die zurckgegebene Variable auf 0 setzen.

<b>Die Gesamtheit der anzuwendenden Ausrichtungsregeln:</b>

Die Ausrichtung eines Arrays ist die gleiche wie die Ausrichtung eines der Elemente des Arrays.

Die Ausrichtung am Beginn einer Struktur ist die maximale Ausrichtung jedes einzelnen Mitglieds der Struktur.
Jedes Element in der Struktur ist anzuordnen gem der richtigen Ausrichtung, wie in der obigen Tabelle definiert, welche eine implizite Einbettung erfordert, in Abhngigkeit zum vorhergehenden Element.

Die Strukturgre ist ein ganzzahliges Vielfaches ihrer Ausrichtung, was ein Auffllen nach dem letzten Element erfordert.


###Related###
DllCall, DllStructGetData, DllStructSetData, DllStructGetPtr, DllStructGetSize, IsDllStruct


###Example###
@@IncludeExample@@
